package com.ketai.util;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;

import javax.servlet.http.Part;
import java.io.*;
import java.nio.Buffer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * @Author:长沙科泰梦想学院
 * @Description:
 * @Date:Create In 2022/6/30 10:11
 **/
public class FileUploadUtil {

    static String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
    static String accessKeyId = "LTAI5tAcqJqoiKpRJnxhE9KT";
    static String accessKeySecret = "BhEAQDMsLd14jptFBLQEFg67BMqfwR";
    // 填写Bucket名称，例如examplebucket。
    static String bucketName = "hosiptor";
    static String objectName = "product"; // 拼接上传的文件的路径的




    /**
     * @param serverPath 文件保存的路径
     * @param part       part接口的对象
     */
    public static String fileUpload (String serverPath, Part part) {
        File saveDir = new File(serverPath);
        if (!saveDir.exists()) {
            // 如果上传的目录不存在  就创建
            saveDir.mkdirs();
        }
        String fileName = part.getSubmittedFileName(); // 获取文件的名称  abc.jpg
        if (fileName == null || fileName.length() == 0) {

            return null;
        }
        // 获取文件文件后缀
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        // 随机的生成一个32的字符串  对文件重新命名  防止出现重名的情况
        String saveFileName = UUID.randomUUID() + suffix;
        // 向指定的文件夹写入文件
        try {
            // 把文件写入到指定的路径   File.separator 文件分隔符
            part.write(serverPath + File.separator + saveFileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return saveFileName;

    }


    /**
     * 文件上传到阿里云OSS服务器
     */

    public static String fileUploadOSS (Part part) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 获取上传文件的原名称
        String fileName = part.getSubmittedFileName(); // 获取文件的名称  abc.jpg
        // 获取文件文件后缀
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        // 随机的生成一个32的字符串  对文件重新命名  防止出现重名的情况
        String saveFileName = UUID.randomUUID() + suffix;  //5673463856837657386535436.png

          //按照时间内划分文件夹  2022/07/19
          String  dateFile = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
     //product/2022/07/19/6w486748678476467.png
        try {
            // product/565437654764764.png
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName+"/"+dateFile+"/"+saveFileName,part.getInputStream());
            PutObjectResult result=ossClient.putObject(putObjectRequest);
            System.out.println(result);
        } catch (IOException e) {
            e.printStackTrace();
        }

         return endpoint.replaceFirst("https://","https://"+bucketName+".")+"/"+objectName+"/"+dateFile+"/"+saveFileName;
    }

    /**
     * 接受普通的表单值
     *
     * @param part
     * @return
     * @throws IOException
     */
    public static String acceptText (Part part) throws IOException {

        BufferedReader reader = new BufferedReader(new InputStreamReader(part.getInputStream(), "UTF-8"));
        StringBuilder value = new StringBuilder();
        char[] buffer = new char[1024];
        for (int length; (length = reader.read(buffer)) > 0; ) {
            value.append(buffer, 0, length);

        }
        return value.toString();
    }
}
